/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package uy.edu.ort.proveedorservicios.servicios;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.List;
import java.util.StringTokenizer;
import uy.edu.ort.proveedorservicios.persistencia.Persistencia;
import uy.edu.ort.proveedorservicios.util.MensajesUtil;
import uy.edu.ort.uyviajes.ws.autorizacion.DatosTarjeta;
import uy.edu.ort.uyviajes.ws.autorizacion.ResultadoAutorizacion;
import uy.edu.ort.uyviajes.ws.paquetes.PaqueteTuristico;

/**
 *
 * @author magui
 */
public class Servicios {
    
    /**
     * Retorna la lista de paquetes turísticos disponibles.
     * @return 
     */
    public static List<PaqueteTuristico> obtenerPaquetes() {
        return Persistencia.getPersistencia().getListaPaquetes();
    }
    
    /**
     * Retorna el resultado de una solicitud de autorización de crédito
     * 
     * @param datosTarjeta
     * @param moneda
     * @param monto
     * @return 
     */
    public static ResultadoAutorizacion autorizar(DatosTarjeta datosTarjeta, String moneda, double monto) {
        ResultadoAutorizacion resultado = new ResultadoAutorizacion();
        resultado.setCodigoAutorizacion(Calendar.getInstance().getTime().toString().concat(datosTarjeta.getNumero()));
        if(Persistencia.getPersistencia().existeTarjeta(datosTarjeta)){
            //verifica que el vencimiento sea menor a la mes y año actual
            if(tarjetaVencida(datosTarjeta)){
                resultado.setError(true);
                resultado.setCodigoError("TARJETA_VENCIDA");
                resultado.setMensajeError(MensajesUtil.obtenerMensaje("TARJETA_VENCIDA", null));
            }
            else{
                //vericacion de monto
                resultado.setError(false);
                resultado.setCodigoError("CREDITO_APROBADO");
                resultado.setMensajeError(MensajesUtil.obtenerMensaje("CREDITO_APROBADO", null));
            }
        }
        else{
            resultado.setError(true);
            resultado.setCodigoError("TARJETA_NO_EXISTE");
            resultado.setMensajeError(MensajesUtil.obtenerMensaje("TARJETA_NO_EXISTE", null));
        }
        
        return resultado;
    }
    
    private static boolean tarjetaVencida(DatosTarjeta datosTarjeta){
        Calendar cal = Calendar.getInstance();
        SimpleDateFormat sdf = new SimpleDateFormat("MM/yyyy");
        String fecha = sdf.format(cal.getTime());

        String[] resultActual = fecha.split("/");
        String mesActual = resultActual[0];
        String anioActual = resultActual[1];

        String[] result = datosTarjeta.getVencimiento().split("/");
        String mesTarjeta = result[0];
        String anioTarjeta = result[1];
        int difAnio = anioActual.compareToIgnoreCase(anioTarjeta);
        int difMes = mesActual.compareTo(mesTarjeta);

        boolean retorno = false;
        //fecha de vencimiento menor a fecha actual
        if(difAnio <= 0){
            if(difMes <= 0){
                retorno = true;
            }
        }
        return retorno;
   }

}